home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #5 & #6 / Amiga Plus CD - 1995 - No. 5 and 6.iso / pd / netz / term / extras / source / term-source.lha / PathPanel.c < prev    next >
C/C++ Source or Header  |  1995-06-17  |  12KB  |  492 lines

  1. /*
  2. **    PathPanel.c
  3. **
  4. **    Editing panel for path configuration
  5. **
  6. **    Copyright © 1990-1995 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_AUPLOAD=1000,GAD_ADOWNLOAD,GAD_TUPLOAD,GAD_TDOWNLOAD,
  13.         GAD_BUPLOAD,GAD_BDOWNLOAD,GAD_CONFIGSTORE,GAD_EDITOR,GAD_HELPFILE,
  14.  
  15.         GAD_USE,GAD_CANCEL,GAD_DEFAULT,
  16.         GAD_PAGER,GAD_PAGEGROUP
  17.     };
  18.  
  19. BYTE __regargs
  20. PathPanel(struct Configuration *Config,BYTE *Default)
  21. {
  22.     STATIC LONG LabelTable[] =
  23.     {
  24.         MSG_PATHPANEL_DEFAULT_ASCII_UPLOAD_PATH_GAD,
  25.         MSG_PATHPANEL_DEFAULT_ASCII_DOWNLOAD_PATH_GAD,
  26.         MSG_PATHPANEL_DEFAULT_TEXT_UPLOAD_PATH_GAD,
  27.         MSG_PATHPANEL_DEFAULT_TEXT_DOWNLOAD_PATH_GAD,
  28.         MSG_PATHPANEL_DEFAULT_BINARY_UPLOAD_PATH_GAD,
  29.         MSG_PATHPANEL_DEFAULT_BINARY_DOWNLOAD_PATH_GAD,
  30.         MSG_PATHPANEL_CONFIGURATION_STORAGE_DIR_GAD,
  31.         MSG_PATHPANEL_DEFAULT_TEXT_EDITOR_GAD,
  32.         MSG_PATHPANEL_HELP_TEXT_FILE_GAD
  33.     };
  34.  
  35.     STATIC LONG PageTitleID[5] =
  36.     {
  37.         MSG_V36_0121,
  38.         MSG_V36_0122,
  39.         MSG_V36_0123,
  40.         MSG_V36_0124,
  41.         -1
  42.     };
  43.  
  44.     STATIC BYTE         InitialPage = 0;
  45.  
  46.     LONG             i,Max,Len;
  47.  
  48.     struct LayoutHandle    *Handle;
  49.     BYTE             Cancel = FALSE;
  50.     STRPTR             PageTitle[5];
  51.  
  52.     LocalizeStringTable(PageTitle,PageTitleID);
  53.  
  54.     SaveConfig(Config,PrivateConfig);
  55.  
  56.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  57.         LH_LocaleHook,    &LocaleHook,
  58.         LH_ExitFlush,    FALSE,
  59.     TAG_DONE))
  60.     {
  61.         struct Window *PanelWindow;
  62.  
  63.         for(i = Max = 0 ; i < 9 ; i++)
  64.         {
  65.             if((Len = LT_LabelChars(Handle,LocaleString(LabelTable[i]))) > Max)
  66.                 Max = Len;
  67.         }
  68.  
  69.         LT_New(Handle,
  70.             LA_Type,    VERTICAL_KIND,
  71.         TAG_DONE);
  72.         {
  73.             LT_New(Handle,
  74.                 LA_Type,VERTICAL_KIND,
  75.             TAG_DONE);
  76.             {
  77.                 LT_New(Handle,
  78.                     LA_Type,    CYCLE_KIND,
  79.                     LA_ID,        GAD_PAGER,
  80.                     LA_LabelID,    MSG_XFER_PAGE_TXT,
  81.                     GTCY_Labels,    PageTitle,
  82.                     LACY_AutoPageID,GAD_PAGEGROUP,
  83.                     LACY_TabKey,    TRUE,
  84.                     LA_BYTE,    &InitialPage,
  85.                 TAG_DONE);
  86.  
  87.                 LT_EndGroup(Handle);
  88.             }
  89.  
  90.             LT_New(Handle,
  91.                 LA_Type,    VERTICAL_KIND,
  92.                 LA_ID,        GAD_PAGEGROUP,
  93.                 LAGR_Frame,    TRUE,
  94.                 LAGR_ActivePage,InitialPage,
  95.             TAG_DONE);
  96.             {
  97.                 LT_New(Handle,
  98.                     LA_Type,    VERTICAL_KIND,
  99.                 TAG_DONE);
  100.                 {
  101.                     LT_New(Handle,
  102.                         LA_Type,    STRING_KIND,
  103.                         LA_LabelID,    MSG_PATHPANEL_DEFAULT_ASCII_UPLOAD_PATH_GAD,
  104.                         LA_ID,        GAD_AUPLOAD,
  105.                         LA_Chars,    20,
  106.                         LA_LabelChars,    Max,
  107.                         LAST_Picker,    TRUE,
  108.                         GTST_MaxChars,    MAX_FILENAME_LENGTH - 1,
  109.                         LA_STRPTR,    Config -> PathConfig -> ASCIIUploadPath,
  110.                     TAG_DONE);
  111.  
  112.                     LT_New(Handle,
  113.                         LA_Type,    STRING_KIND,
  114.                         LA_ID,        GAD_ADOWNLOAD,
  115.                         LA_LabelID,    MSG_PATHPANEL_DEFAULT_ASCII_DOWNLOAD_PATH_GAD,
  116.                         LA_LabelChars,    Max,
  117.                         LAST_Picker,    TRUE,
  118.                         GTST_MaxChars,    MAX_FILENAME_LENGTH - 1,
  119.                         LA_STRPTR,    Config -> PathConfig -> ASCIIDownloadPath,
  120.                     TAG_DONE);
  121.  
  122.                     LT_EndGroup(Handle);
  123.                 }
  124.  
  125.                 LT_New(Handle,
  126.                     LA_Type,        VERTICAL_KIND,
  127.                 TAG_DONE);
  128.                 {
  129.                     LT_New(Handle,
  130.                         LA_Type,    STRING_KIND,
  131.                         LA_LabelID,    MSG_PATHPANEL_DEFAULT_TEXT_UPLOAD_PATH_GAD,
  132.                         LA_LabelChars,    Max,
  133.                         LA_ID,        GAD_TUPLOAD,
  134.                         LA_Chars,    20,
  135.                         LAST_Picker,    TRUE,
  136.                         GTST_MaxChars,    MAX_FILENAME_LENGTH - 1,
  137.                         LA_STRPTR,    Config -> PathConfig -> TextUploadPath,
  138.                     TAG_DONE);
  139.  
  140.                     LT_New(Handle,
  141.                         LA_Type,    STRING_KIND,
  142.                         LA_ID,        GAD_TDOWNLOAD,
  143.                         LA_LabelID,    MSG_PATHPANEL_DEFAULT_TEXT_DOWNLOAD_PATH_GAD,
  144.                         LA_LabelChars,    Max,
  145.                         LAST_Picker,    TRUE,
  146.                         GTST_MaxChars,    MAX_FILENAME_LENGTH - 1,
  147.                         LA_STRPTR,    Config -> PathConfig -> TextDownloadPath,
  148.                     TAG_DONE);
  149.  
  150.                     LT_EndGroup(Handle);
  151.                 }
  152.  
  153.                 LT_New(Handle,
  154.                     LA_Type,    VERTICAL_KIND,
  155.                 TAG_DONE);
  156.                 {
  157.                     LT_New(Handle,
  158.                         LA_Type,    STRING_KIND,
  159.                         LA_LabelID,    MSG_PATHPANEL_DEFAULT_BINARY_UPLOAD_PATH_GAD,
  160.                         LA_LabelChars,    Max,
  161.                         LA_ID,        GAD_BUPLOAD,
  162.                         LA_Chars,    20,
  163.                         LAST_Picker,    TRUE,
  164.                         GTST_MaxChars,    MAX_FILENAME_LENGTH - 1,
  165.                         LA_STRPTR,    Config -> PathConfig -> BinaryUploadPath,
  166.                     TAG_DONE);
  167.  
  168.                     LT_New(Handle,
  169.                         LA_Type,    STRING_KIND,
  170.                         LA_ID,        GAD_BDOWNLOAD,
  171.                         LA_LabelID,    MSG_PATHPANEL_DEFAULT_BINARY_DOWNLOAD_PATH_GAD,
  172.                         LA_LabelChars,    Max,
  173.                         LAST_Picker,    TRUE,
  174.                         GTST_MaxChars,    MAX_FILENAME_LENGTH - 1,
  175.                         LA_STRPTR,    Config -> PathConfig -> BinaryDownloadPath,
  176.                     TAG_DONE);
  177.  
  178.                     LT_EndGroup(Handle);
  179.                 }
  180.  
  181.                 LT_New(Handle,
  182.                     LA_Type,    VERTICAL_KIND,
  183.                 TAG_DONE);
  184.                 {
  185.                     LT_New(Handle,
  186.                         LA_Type,    STRING_KIND,
  187.                         LA_LabelID,    MSG_PATHPANEL_CONFIGURATION_STORAGE_DIR_GAD,
  188.                         LA_LabelChars,    Max,
  189.                         LA_ID,        GAD_CONFIGSTORE,
  190.                         LA_Chars,    20,
  191.                         LAST_Picker,    TRUE,
  192.                         GTST_MaxChars,    MAX_FILENAME_LENGTH - 1,
  193.                         LA_STRPTR,    Config -> PathConfig -> DefaultStorage,
  194.                     TAG_DONE);
  195.  
  196.                     LT_New(Handle,
  197.                         LA_Type,    STRING_KIND,
  198.                         LA_ID,        GAD_EDITOR,
  199.                         LA_LabelID,    MSG_PATHPANEL_DEFAULT_TEXT_EDITOR_GAD,
  200.                         LA_LabelChars,    Max,
  201.                         LAST_Picker,    TRUE,
  202.                         GTST_MaxChars,    MAX_FILENAME_LENGTH - 1,
  203.                         LA_STRPTR,    Config -> PathConfig -> Editor,
  204.                     TAG_DONE);
  205.  
  206.                     LT_New(Handle,
  207.                         LA_Type,    STRING_KIND,
  208.                         LA_ID,        GAD_HELPFILE,
  209.                         LA_LabelID,    MSG_PATHPANEL_HELP_TEXT_FILE_GAD,
  210.                         LA_LabelChars,    Max,
  211.                         LAST_Picker,    TRUE,
  212.                         GTST_MaxChars,    MAX_FILENAME_LENGTH - 1,
  213.                         LA_STRPTR,    Config -> PathConfig -> HelpFile,
  214.                     TAG_DONE);
  215.  
  216.                     LT_EndGroup(Handle);
  217.                 }
  218.  
  219.                 LT_EndGroup(Handle);
  220.             }
  221.  
  222.             LT_New(Handle,
  223.                 LA_Type,VERTICAL_KIND,
  224.             TAG_DONE);
  225.             {
  226.                 LT_New(Handle,
  227.                     LA_Type,    XBAR_KIND,
  228.                     LAXB_FullSize,    TRUE,
  229.                 TAG_DONE);
  230.  
  231.                 LT_EndGroup(Handle);
  232.             }
  233.  
  234.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  235.                 LAGR_SameSize,    TRUE,
  236.                 LAGR_Spread,    TRUE,
  237.             TAG_DONE);
  238.             {
  239.                 LT_New(Handle,
  240.                     LA_Type,    BUTTON_KIND,
  241.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  242.                     LA_ID,        GAD_USE,
  243.                     LABT_ReturnKey,    TRUE,
  244.                     LABT_ExtraFat,    TRUE,
  245.                 TAG_DONE);
  246.  
  247.                 if(Default)
  248.                 {
  249.                     LT_New(Handle,
  250.                         LA_Type,    BUTTON_KIND,
  251.                         LA_LabelID,    MSG_GLOBAL_DEFAULT_GAD,
  252.                         LA_ID,        GAD_DEFAULT,
  253.                         LABT_ExtraFat,    TRUE,
  254.                     TAG_DONE);
  255.                 }
  256.  
  257.                 LT_New(Handle,
  258.                     LA_Type,    BUTTON_KIND,
  259.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  260.                     LA_ID,        GAD_CANCEL,
  261.                     LABT_EscKey,    TRUE,
  262.                     LABT_ExtraFat,    TRUE,
  263.                 TAG_DONE);
  264.  
  265.                 LT_EndGroup(Handle);
  266.             }
  267.  
  268.             LT_EndGroup(Handle);
  269.         }
  270.  
  271.         if(PanelWindow = LT_Layout(Handle,LocaleString(MSG_PATHPANEL_PATH_PREFERENCES_TXT),NULL,0,0,IDCMP_CLOSEWINDOW,0,
  272.             LAWN_HelpHook,        &GuideHook,
  273.             LAWN_Parent,        Window,
  274.             WA_DepthGadget,        TRUE,
  275.             WA_CloseGadget,        TRUE,
  276.             WA_DragBar,        TRUE,
  277.             WA_RMBTrap,        TRUE,
  278.             WA_Activate,        TRUE,
  279.         TAG_DONE))
  280.         {
  281.             struct IntuiMessage    *Message;
  282.             BOOLEAN             Done = FALSE;
  283.             ULONG             MsgClass,
  284.                          MsgQualifier;
  285.             UWORD             MsgCode;
  286.             struct Gadget        *MsgGadget;
  287.  
  288.             GuideContext(CONTEXT_PATHS);
  289.  
  290.             PushWindow(PanelWindow);
  291.  
  292.             LT_ShowWindow(Handle,TRUE);
  293.  
  294.             do
  295.             {
  296.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  297.                 {
  298.                     SaveConfig(PrivateConfig,Config);
  299.  
  300.                     break;
  301.                 }
  302.  
  303.                 while(Message = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort))
  304.                 {
  305.                     MsgClass    = Message -> Class;
  306.                     MsgQualifier    = Message -> Qualifier;
  307.                     MsgCode        = Message -> Code;
  308.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  309.  
  310.                     GT_ReplyIMsg(Message);
  311.  
  312.                     LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  313.  
  314.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  315.                     {
  316.                         SaveConfig(PrivateConfig,Config);
  317.  
  318.                         Done = TRUE;
  319.                     }
  320.  
  321.                     if(MsgClass == IDCMP_GADGETUP)
  322.                     {
  323.                         switch(MsgGadget -> GadgetID)
  324.                         {
  325.                             case GAD_USE:
  326.  
  327.                                 LT_UpdateStrings(Handle);
  328.  
  329.                                 Done = TRUE;
  330.                                 break;
  331.  
  332.                             case GAD_CANCEL:
  333.  
  334.                                 SaveConfig(PrivateConfig,Config);
  335.  
  336.                                 Cancel = Done = TRUE;
  337.                                 break;
  338.  
  339.                             case GAD_DEFAULT:
  340.  
  341.                                 *Default = TRUE;
  342.  
  343.                                 Done = TRUE;
  344.                                 break;
  345.  
  346.                             default:
  347.  
  348.                                 if(MsgGadget -> GadgetID >= GAD_AUPLOAD && MsgGadget -> GadgetID <= GAD_HELPFILE)
  349.                                 {
  350.                                     if(TypeOfMem((APTR)LT_GetAttributes(Handle,MsgGadget -> GadgetID,TAG_DONE)))
  351.                                     {
  352.                                         UBYTE DummyBuffer[MAX_FILENAME_LENGTH];
  353.  
  354.                                         strcpy(DummyBuffer,(STRPTR)LT_GetAttributes(Handle,MsgGadget -> GadgetID,TAG_DONE));
  355.  
  356.                                         if(MsgGadget -> GadgetID < GAD_EDITOR)
  357.                                             FindDrawer(PanelWindow,DummyBuffer,TRUE,NULL);
  358.                                         else
  359.                                         {
  360.                                             if(MsgGadget -> GadgetID == GAD_EDITOR)
  361.                                                 FindProgram(PanelWindow,DummyBuffer,NULL);
  362.                                             else
  363.                                                 FindFile(PanelWindow,DummyBuffer,NULL);
  364.                                         }
  365.                                     }
  366.                                 }
  367.  
  368.                                 break;
  369.                         }
  370.                     }
  371.  
  372.                     if(MsgClass == IDCMP_IDCMPUPDATE)
  373.                     {
  374.                         if(MsgGadget -> GadgetID >= GAD_AUPLOAD && MsgGadget -> GadgetID <= GAD_HELPFILE)
  375.                         {
  376.                             WORD    ID    = MsgGadget -> GadgetID;
  377.                             STRPTR    Name    = LT_GetString(Handle,ID);
  378.  
  379.                             if(Name)
  380.                             {
  381.                                 UBYTE             DummyBuffer[MAX_FILENAME_LENGTH],
  382.                                             *DummyChar;
  383.                                 struct FileRequester    *FileRequest;
  384.  
  385.                                 LT_LockWindow(PanelWindow);
  386.  
  387.                                 strcpy(DummyBuffer,Name);
  388.  
  389.                                 if(ID < GAD_EDITOR || !DummyBuffer[0])
  390.                                     DummyChar = "";
  391.                                 else
  392.                                 {
  393.                                     if(FilePart(DummyBuffer) == DummyBuffer)
  394.                                         DummyBuffer[0] = 0;
  395.                                     else
  396.                                     {
  397.                                         DummyChar = PathPart(DummyBuffer);
  398.  
  399.                                         *DummyChar = 0;
  400.                                     }
  401.  
  402.                                     DummyChar = FilePart(Name);
  403.                                 }
  404.  
  405.                                 if(FileRequest = GetFile(PanelWindow,LocaleString(ID - GAD_AUPLOAD + MSG_PATHPANEL_SELECT_DEFAULT_ASCII_UPLOAD_PATH_TXT),DummyBuffer,DummyChar,DummyBuffer,NULL,FALSE,FALSE,ID < GAD_EDITOR,LocaleString(MSG_GLOBAL_SELECT_TXT),TRUE))
  406.                                 {
  407.                                     if(ID < GAD_EDITOR)
  408.                                         FindDrawer(PanelWindow,DummyBuffer,TRUE,NULL);
  409.                                     else
  410.                                     {
  411.                                         if(ID == GAD_EDITOR)
  412.                                             FindProgram(PanelWindow,DummyBuffer,NULL);
  413.                                         else
  414.                                             FindFile(PanelWindow,DummyBuffer,NULL);
  415.                                     }
  416.  
  417.                                     LT_SetAttributes(Handle,ID,
  418.                                         GTST_String,    DummyBuffer,
  419.                                     TAG_DONE);
  420.  
  421.                                     FreeAslRequest(FileRequest);
  422.                                 }
  423.  
  424.                                 LT_UnlockWindow(PanelWindow);
  425.                             }
  426.                         }
  427.                     }
  428.                 }
  429.             }
  430.             while(!Done);
  431.  
  432.             PopWindow();
  433.         }
  434.  
  435.         LT_DeleteHandle(Handle);
  436.     }
  437.  
  438.     if(Default)
  439.         return((BYTE)(!Cancel));
  440.     else
  441.     {
  442.         if(Config -> PathConfig && Config -> TransferConfig && Config -> MiscConfig)
  443.         {
  444.             if(Config -> MiscConfig -> ProtectiveMode && !Config -> TransferConfig -> OverridePath)
  445.             {
  446.                 STRPTR    Library    = NULL,
  447.                     Path    = NULL;
  448.  
  449.                 if(Config -> TransferConfig -> DefaultType == XFER_XPR && Config -> TransferConfig -> DefaultLibrary[0])
  450.                 {
  451.                     Library    = Config -> TransferConfig -> DefaultLibrary;
  452.                     Path    = Config -> PathConfig -> BinaryDownloadPath;
  453.                 }
  454.  
  455.                 if(Config -> TransferConfig -> ASCIIDownloadType == XFER_XPR && Config -> TransferConfig -> ASCIIDownloadLibrary[0])
  456.                 {
  457.                     Library    = Config -> TransferConfig -> ASCIIDownloadLibrary;
  458.                     Path    = Config -> PathConfig -> ASCIIDownloadPath;
  459.                 }
  460.  
  461.                 if(Config -> TransferConfig -> TextDownloadType == XFER_XPR && Config -> TransferConfig -> TextDownloadLibrary[0])
  462.                 {
  463.                     Library    = Config -> TransferConfig -> TextDownloadLibrary;
  464.                     Path    = Config -> PathConfig -> TextDownloadPath;
  465.                 }
  466.  
  467.                 if(Config -> TransferConfig -> BinaryDownloadType == XFER_XPR && Config -> TransferConfig -> BinaryDownloadLibrary[0])
  468.                 {
  469.                     Library    = Config -> TransferConfig -> BinaryDownloadLibrary;
  470.                     Path    = Config -> PathConfig -> BinaryDownloadPath;
  471.                 }
  472.  
  473.                 if(Library && Path)
  474.                 {
  475.                     UBYTE LocalBuffer[MAX_FILENAME_LENGTH];
  476.  
  477.                     if(*Path == 0)
  478.                     {
  479.                         if(GetCurrentDirName(LocalBuffer,MAX_FILENAME_LENGTH))
  480.                             Path = LocalBuffer;
  481.                     }
  482.  
  483.                     if(MyEasyRequest(Window,LocaleString(MSG_XPR_PATH_TXT),LocaleString(MSG_GLOBAL_YES_NO_TXT),Library,Path))
  484.                         Config -> TransferConfig -> OverridePath = TRUE;
  485.                 }
  486.             }
  487.         }
  488.  
  489.         return((BYTE)memcmp(PrivateConfig -> PathConfig,Config -> PathConfig,sizeof(struct PathSettings)));
  490.     }
  491. }
  492.